Windows内壳驱动攻击 (Pt. 1) - 环境搭建
这是接下来一系列关于通过驱动漏洞进行Windows内核驱动攻击里的第一部篇。
在这个项目里我将会使用的带漏洞驱动是 HackSys Extreme Vulnerable Driver,你可以写一系列的基于 IOCTL 的攻击。
这个驱动可以下载x86和amd64两个已编译版本。这篇文章中我将使用x86版本, 因为会更好理解。
为了热插拔加载驱动到Windows里,HackSys推荐使用OSR Driver Loader。
虚拟机通信设置
我的操作系统是Linux,所以我无法在我的电脑上跑WinDbg来与win7虚拟机通信。
所以我最后设置了两个虚拟机(均使用相同的Win7 Sp1 x86 镜像)。然后我使用Virtual Box来在我的Linux上设置了一个文件,我通过这个文件来建立两个虚拟机之间的通信。
在虚拟机电源关闭的情况下,我设置了第一个虚拟机的Serial Port。这个虚拟机将被用于运行WinDbg的调试。
第二个用于安装HackSys驱动的虚拟机的设置和第一个类似。
这样,两个虚拟机间通过/tmp/win_link的通信就完成了!
虚拟机调试设置
现在虚拟机配置好了,我们要做些设置来让通信运行起来。
打开用于调试的虚拟机并且安装WinDbg。完成后我们需要设置环境变量来告诉WinDbg内核符号的来源。设置_NT_SYMBOL_PATH环境变量到https://msdl.microsoft.com/download/symbols。搞定!
现在打开被攻击的虚拟机,我们需要打开Windows调试启动的选项。
首先我们到command prompt里把现在的启动设置复制到一个我们将编辑的新入口:
bcdedit /copy {current} /d "Debug"
这个命令会产出一个我们将要用于引用新的调试选项的GUID。现在我们开通启动选项的调试模式。
bcdedit /debug <GUID> on
搞定!我们在这个虚拟机上现在拥有一个打开了调试选项的开机设置,它将会通过我们的通信文件传递信息给用于调试的虚拟机。
现在我们回到用于调试的虚拟机并打开WinDbg。去到File -> Kernel Debug并输入115200来进行通信,使用com1当接口。
重启被攻击的虚拟机,并在启动菜单里选择“Debug”。让他进入到桌面,之后通过选择Debug -> Break 在WinDbg里创建一个中断使被调试的Windows虚拟机中断。如果WinDbg给你一个kd> 命令行,并且被攻击的虚拟机卡住了,那恭喜你,成功中断了!
安装HackSys驱动
现在虚拟机已经被设置成可以调试,我们将要把HackSys驱动装到被攻击的虚拟机来攻击他。
驱动默认使不会很多调试信息,所以我们要打开这些调试信息。
当虚拟机被中断时,我们可以通过以下命令来改变WinDbg里的 Default Mask。
ed nt!Kd_Default_Mask 8
你可以通过在kd> 里输入 g 来继续虚拟机的运行。我们将这样做,进而安装驱动。
假设你已经有了一开头我提到的那些驱动以及安装程序,我们就可以开始装驱动了。打开OSR你可以设置浏览到驱动路径并且让服务自动开启,然后注册这个服务。当注册完成直接开始服务。
做了这些以后,WinDbg会有些调试的信息。
现在驱动安装好了并且在运行了,我们将安装HackSys驱动的符号,这样WinDbg才可以更有用。
我们可以通过以下命令在WinDbg里找到HEVD模块
最后一行就是HEVD驱动,deferred代表WinDbg没有加载任何符号。
我们可以通过以下命令打开路径调试信息来找到放HEVD的pdb的位置:
1: kd> !sym noisy
noisy mode - symbol prompts on
尝试打印全部HEVD的函数,我们可以找到Windbg需要我们放HEVD pdb文件的位置。
如果它没法在线找到,第二选择就是这个地方C:\ProgramData\dbg\sym\HEVD.pdb\D241CC04CE0B472CB88B1476958369FB1\HEVD.pdb.
在调试的虚拟机上存个和你的驱动版本相同的pdb文件并且运行.reload来重新加载符号。所以你现在可以运行:
来得到所有HEVD里的符号。成功!
测试驱动
最终我们可以测试已经写好的驱动攻击来确保所有的东西正常运行,然后编写我们自己的攻击。
它可以通过pool overflow攻击来使用系统权限打开cmd.exe。准备完毕,下一个阶段,让我们开始逆向吧!
本文由看雪论坛 wx_rd.cheung 原创
转载请注明来自看雪社区
热门阅读
点击阅读原文/read,
更多干货等着你~